<?php
/**
 *
 * 本接口用于将client_id与用户绑定(bindUid)，并加入特定的群组(joinGroup)
 * bindUid后就可以通过接口Gateway::sendToUid向uid发送数据(见send_message.php)
 * joinGroup后就可以收到对应群组的消息。用接口Gateway::sendToGroup向群组发送消息(见send_message.php)
 *
 * 本接口中写死了让所有用户加入101群组，101是随意定义的，你也可以定义成其它的值如 123、abc，
 * 如果你的现有系统有群组数据，可以使用你的群组数据。
 * 注意：加入的群组必须在init.php返回的json中有定义
 *
 */
use Lib\Db;

require_once __DIR__ . '/__init.php';
_session_start();
$db = Db::instance('laychat');
$agent_id=0;
$reseller_id=0;
//===================================
//获取用户uid或未登录的ip
$cook=$_GET['PHPSESSID'];
$avatar_user=config_img(1);
$avatar_custom=config_img(2);

//区分前后台
//前--台
if(empty($_GET['uid'])){
    //$cook = str_replace('.','-', $cook);
    //查前台用户users表中
    $res = $db->query("select * from `users` where id =$cook");
    if(!$res){
        //查询临时表user_laychat
        $res_new = $db->query("select * from `user_laychat` where username ='$cook'");
        if(!$res_new){
            //没有 则插入临时表user_laychat
            $db->insert('user_laychat')->cols(array(
                'uid',
                'username',
                'sign',
                'avatar',
                'reg_timestamp',
                'status',
            ))->bindValues(array(
                'uid'=>$cook,
                'username'=>$cook,
                'sign'=>'用户',
                'avatar'=>$avatar_user,
                'reg_timestamp'=>time(),
                'status'=>'online'
            ))->query();

        }else{
            //有 则更新临时表user_laychat
            Db::instance('laychat')->update('user_laychat')->col('status', 'online')->where('username=:username')->bindValue('username', $cook)->query();
        }
//        //取临时user_laychat表中的id
//        $res_id = $db->query("select * from `user_laychat` where username ='$cook'");

        $se['laychat']=array(
            'id'=>$cook,
            'username'=>$cook,
            'sign'=>'用户',
            'avatar'=>$avatar_user,
        );
    }else{
        //users表中有数据
        //更新在线状态
        Db::instance('laychat')->update('users')->col('online', 'online')->where('id=:id')->bindValue('id', $cook)->query();

        if($res[0]['agent_id']){
            $agent_id=$res[0]['agent_id'];
        }
        if($res[0]['reseller_id']){
            $reseller_id=$res[0]['reseller_id'];
        }

        $se['laychat']=array(
            'id'=>"user-".$res[0]['id'],
            'username'=>$res[0]['username'],
            'sign'=>'用户',
            'avatar'=>$avatar_user,
        );

    }

    //后--台
}else{
    //在后台admins表中查
    $res_admin = $db->query("select * from `admins` where id ={$cook}");

    if(isset($res_admin[0]['name'])){
        $name = $res_admin[0]['name'];
    }else{
        $name = $res_admin[0]['username'];
    }


    $se['laychat'] = array(
        'id'       => "admin-".$cook,
        'username' => $name,
        'sign'     => '客服',
        'avatar'   => $avatar_custom,
    );

}


// 此session是在用户登录时设置的
if (!isset($se['laychat'])) {
    exit_json(array(
        'code'=> '400',
        'msg' => '请登录2',
    ));
}

// 要求post一个client_id
if (empty($_POST)) {
    exit_json(array(
        'code'=> '400',
        'msg' => '缺少参数',
    ));
}

// 用户id 用户名 个性签名 头像等信息
$id        = $se['laychat']['id'];
$username  = $se['laychat']['username'];
$sign      = $se['laychat']['sign'];
$avatar    = $se['laychat']['avatar'];

// 获得要绑定的client_id，每个client_id对应一个socket链接
$client_id = $_POST['client_id'];
// 将client_id与uid绑定，通过Gateway::sendToUid给这个uid发消息(在send_message.php中有调用)
Gateway::bindUid($client_id, $id);
// 给client_id设置Gateway的session，方便通过Gateway::getClientSessionsByGroup获得某个群组所有在线用户信息(id 名字 头像等)
Gateway::updateSession($client_id, $se['laychat']);

$res_num = Gateway::getClientIdByUid($id);

$_SESSION['laychat']['client_id']  = $client_id;

// 通知所有客户端当前用户上线
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//$online_message = array(
//    'message_type' => 'online',
//    'reseller_id' => $reseller_id,
//    'agent_id' => $agent_id,
//    'id'           => $id
//);
//
//Gateway::sendToAll(json_encode($online_message));

$unread_message=0;
$unread_notice_count=0;

// 返回json数据
exit_json(array('code'=>0, 'unread_message' => $unread_message,'res_num'=>$res_num, 'unread_notice_count' => $unread_notice_count ? '新消息' : 0));